<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 第一题： 定义一个含有30个整型元素的数组，按顺序分别赋予从2开始的偶数；然后按顺序每五个数求出一个平均值，放在另一个数组中并输出。试编程。
        // 一、获取2-60的偶数放在数组里
        // var arr = [];
        // for(var i=2;i<=60;i+=2){
        //     // console.log(i);
        //     arr.push(i);
        // }
        // // console.log(arr);
        // // 二、计算每5个数的平均数
        // // arr = [2,4,6,8....];
        // // 0+1+2+3  累加的是索引

        // var total = 0;
        // var newArr = [];
        // for(var i=1;i<=arr.length;i++){
        //     total+=arr[i-1];
        //     if(i%5==0){
        //         // console.log(total);// 每5个数字的累加结果
        //         // 5个数的平均数字
        //         var num = total/5;
        //         // console.log(num);
        //         newArr.push(num);
        //         total = 0;  // 每次加完5次之后 把累加的结果置空 ，如果不置空就会把所有5次累加的结果再累加
        //     }
        // }
        // console.log(newArr)

        // 第二题：通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数，然后输出该数组的左下半三角。试编程。
        // var bigArr = [];
        // var arr = [];
        // for (var i = 1; i <= 25; i++) {
        //     arr.push(i);
        //     if (i % 5 == 0) {
        //         // console.log(arr);
        //         bigArr.push(arr);
        //         arr = [];
        //     }
        // }
        // console.log(bigArr)

        /* 
        [
      [1, 2, 3, 4, 5],
      [6, 7, 8, 9, 10],
      [11, 12, 13, 14, 15],
      [16, 17, 18, 19, 20],
      [21, 22, 23, 24, 25]
    ]
        */

        // 1.循环所有的字数组 ， 1----> [1, 2, 3, 4, 5]  index 0 +1  2-- [6, 7, 8, 9, 10]  index 1+ 1 3---...
        // 第一行 
        // var index = 0;
        // var arr = [1, 2, 3, 4, 5];
        // var res =   arr.splice(0,index+1);
        // console.log(res);
        // // 第二行
        // var index = 1;
        // var arr = [6, 7, 8, 9, 10];
        // var res = arr.splice(0,index+1);
        // console.log(res);
        // .....

        // 只需要循环上面的过程
        // for (var i = 0; i < bigArr.length; i++) {
        //     var index = i;
        //     var arr = bigArr[i];
        //     var res = arr.splice(0, index + 1);
        //     console.log(res);
        // }

        // 同学方法方法一
        // var arr = []
        // var arr2 = []
        // var num = 0
        // for (var i = 0; i < 5; i++) {
        //     arr.push([])
        //     arr2.push([])
        //     for (var j = 0; j < 5; j++) {
        //         num++
        //         arr[i].push(num)
        //         if (j <= i) {
        //             arr2[i].push(num)
        //         }

        //     }

        // }
        // console.log(arr2)
        // 方法二：
        // var arr0 = [];
        // var arr = [];

        // for (var i = 1; i <= 25; i++) {
        //     arr.push(i);
        //     if (i % 5 === 0) {
        //         arr0.push(arr);
        //         arr = [];
        //     }
        // }
        // // ===>双重for循环,打印一个5行,每行数字逐层增多的直角三角形
        // for (var k = 0; k < arr0.length; k++) {
        //     for (var j = 0; j <= k; j++) {
        //         document.write(arr0[k][j] + "&nbsp;");
        //     }
        //     document.write("<br/>");
        // }
        // document.write(arr0);

        // 方法三
        // function bb() {
        //     var arr = [
        //         [1, 2, 3, 4, 5],
        //         [6, 7, 8, 9, 10],
        //         [11, 12, 13, 14, 15],
        //         [16, 17, 18, 19, 20],
        //         [21, 22, 23, 24, 25]
        //     ];
        //     for (var g in arr) {
        //         for (var i = 3 - parseInt(g); i >= 0; i--) {
        //             arr[g].pop();
        //         }
        //     }
        //     return arr;
        // }
        // var hh = bb();
        // console.log(hh);

        // 方法四；
        // for (var m = 0; m < 5; m++) {
        //     newBigArr1[m].length=m+1
        // }
        // console.log(newBigArr1);




        //第三题： 随机生成一个五位以内的数，然后输出该数共有多少位，每位分别是什么
        // var num = parseInt( Math.random()*10000);
        // var strNum = String(num);
        // console.log(strNum.length);
        // for(var i=0;i<strNum.length;i++){
        //     console.log(strNum[i])
        // }

        // 第四题：编写函数map(arr) 把数组中的每一位数字都增加30%，并返回一个新数组；
        // var arr = [10,20,100,60];
        // var newArr = [];
        // for(var i=0;i<arr.length;i++){
        //     var num = arr[i]*1.3;
        //     // console.log(num)
        //     newArr.push(num);
        // }
        // console.log(newArr);

        // 第五题：编写函数has(arr , 60) 判断数组中是否存在60这个元素，返回布尔类型
        // var arr1 = [1, 2, 3, 4, 5];
        // var arr2 = [34, 78, 60, 90];

        // function has(arr, num) {
        //     var judge = false;
        //     for (var i = 0; i < arr.length; i++) {
        //         if (arr[i] == num) {
        //             judge = true;
        //         }
        //     }
        //     return judge;
        // }
        // console.log(has(arr1, 60));
        // console.log(has(arr2, 60));

        // 同学的方法
        // var arr = [1, 2, 3, 60];
        // var arr2 = [1, 2, 3];
        // function has(arr, num) {
        //     if (arr.indexOf(num) === -1) {
        //         return false;
        //     } else {
        //         return true;
        //     }
        // }
        // console.log(has(arr, 60));

        // 第六题：编写函数norepeat(arr) 将数组的重复元素去掉，并返回新的数组
        // 数组塌陷
        // var arr = [1,2,3,4,5];
        // for(var i=0;i<arr.length;i++){
        //     arr.splice(i,1);
        //     i--;
        // }
        // console.log(arr);
        /* 
            第一次循环  i = 0  length = 5； ---》 arr.splice(0,1)  ---->[2,3,4,5]  ---->i++ ---> 1
            第二次循环  i = 1  length = 4 ----> arr.splice(1,1) ---->[2,4,5] ---->i++ --->2
            第三次循环  i = 2 length = 3----> arr.spice(2,1) ---> [2,4] ----->i++ ---->3
            第四次循环  i=3  length = 2 --->停止
        */
       /* 
        多数情况下需要解决数组塌陷塌陷 i--
            第一次循环  i = 0  length = 5； ---》 arr.splice(0,1)  ---->[2,3,4,5]  ---->i++ ---> 1 --->i--
            第二次循环  i = 0  length = 4 ----> arr.splice(0,1) ---->[3,4,5] ---->i++ --->1 --->i--
            第三次循环  i = 0 length = 3----> arr.spice(0,1) ---> [4,5] ----->i++ ---->i-----0
            第四次循环  i = 0   length = 2 --->.....
       
       */
//  var arr = [1, 1, 2, 3, 4, 4, 2, 1, 3, 5];
//  思路：先给arr排序 [1,1,1,2,2,3,3,4,4,5]; --->循环 --->判断 前一个和后一个是否一样
//  function  norepeat(arr) {
//      arr.sort(function (a,b) {
//         return a - b;
//     })
    // for(var i=0;i<arr.length-1;i++){
    //     console.log(arr[i],arr[i+1]);
    //     // if(typeof arr[i+1] !== "undefined"){
    //         if(arr[i]===arr[i+1]){
    //         arr.splice(i+1,1);
    //          i--;
    //     // }
    //     }
    // } 
//     return arr;
//  }
//  var res =  norepeat(arr);
//  console.log(res);


//  同学的方法一
        // var arr = [1, 1, 2, 3, 4, 4, 2, 1, 3, 5];
        // var newArr = [];
        // function norepeat() {
        //     for (var i = 0; i < arr.length; i++) {
        //         if (newArr.indexOf(arr[i]) === -1) {
        //             newArr.push(arr[i]);
        //         }
        //     }
        //     return newArr;
        // }
        // console.log(norepeat(arr));

// 同学方法二
    //   function norepeat(arr) {
    //         var newArr = [];
    //         for (var newArrKey of arr) {
    //             if (!newArr.includes(newArrKey)) {
    //                 newArr[newArr.length] = newArrKey
    //             }
    //         }
    //         return newArr
    //     }
    // 了解
    // var set = new Set(arr);
    // var newarr = [...set];
    // console.log(newarr);
      
    // 第七题 有一个从小到大排好序的数组。现输入一个数，要求按原来的规律将它插入数组中
    // 一、非常简单的办法
    // var arr = [1,3,6,8,20];
    // var num = 7;
    // arr.push(num);
    // arr.sort(function (a,b) {
    //     return a-b;
    // })
    // console.log(arr);
    // var arr = [1,3,6,8,20];
    // var num = 7;


    // for(var i=0;i<arr.length;i++){
    //     if(num>arr[i] && num<arr[i+1]){
    //         arr.splice(i+1,0,num);
    //         break;
    //     }
    // }

    // 建议，不要再数组的内部操作原本数组（尽量规避，操作数组后会改变原本数组），可以放在外部来操作数组
    // var index = 0;  
    // for(var i=0;i<arr.length;i++){
    //     if(num>arr[i] && num<arr[i+1]){
    //         index = i;
    //     }
    // }
    // arr.splice(index+1,0,num);
    
    // console.log(arr);

    // 第七题：创建一个对象，该对象存储一个学生的信息，该对象包含学号、身份证、年龄、性别、所学专业等属性信息，
    // 同时该对象包含一个自我介绍的方法，用来输出该对象的所有信息
    var student = {
        name:"张三",
        age:20,
        height:"179cm",
        fn:function(){
            console.log("fn");
            console.log(student.name,student.age,student.height); // 不是一个主流做法
            // this在对象函数里指向 对象本省，注意：调用形式必须是 student.fn();
            console.log(this.name,this.age,this.height);
        }
    }
    // student.fn();
    // 不行
    // var myfn = student.fn;
    // myfn();








    </script>
</body>

</html>